package com.hwadee.service.impl;

import com.hwadee.mapper.PermissionMapper;
import com.hwadee.pojo.Permission;
import com.hwadee.service.PermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class PermissionServiceImpl implements PermissionService {

    @Autowired
    private PermissionMapper permissionMapper;
    //获取所有权限，并构建为树形结构（多级权限菜单）
    @Override
    public List<Permission> getAllPermissions() {
        List<Permission> all = permissionMapper.getAllPermissions();//获取所有权限（扁平列表）
        return buildTree(all);//构建权限树
    }
    //将扁平化的权限列表构建为树状结构
    private List<Permission> buildTree(List<Permission> allPermissions) {
        //根据 id 查找对应的权限对象
        Map<Integer, Permission> map = new HashMap<>();
        //存放所有的根权限节点（parentId 为 null 或 0 的）
        List<Permission> roots = new ArrayList<>();
        //第一次遍历：初始化每个权限的 children 列表，并将其放入 map 中
        for (Permission perm : allPermissions) {
            perm.setChildren(new ArrayList<>()); // 确保每个节点的 children 初始化
            map.put(perm.getId(), perm); // 建立 ID 到 Permission 的映射
        }
        //第二次遍历：将每个权限加入其父节点的 children 中
        for (Permission perm : allPermissions) {
            Integer parentId = perm.getParentId(); // 取出 parentId，防止多次调用

            if (parentId == null || parentId == 0) {
                roots.add(perm); // 如果没有父节点，则为根节点
            } else {
                Permission parent = map.get(parentId);// 找到父节点
                if (parent != null) {
                    parent.getChildren().add(perm); // 添加到父节点的 children 中
                }
            }
        }

        return roots;
    }

}
